package busterminal.persistence;

import busterminal.entity.AbstractEntity;
import java.util.List;

/**
 * Абстрактный интерфейс - предок интерфейсов Data Access Object для всех сущностей
 */
public interface AbstractDAO<EntityType extends AbstractEntity> {

    /**
     * Добавить объект - сущность в хранилище
     * @param entity ссылка на объект
     */
    void create(EntityType entity);

    /**
     * Прочитать объект - сущность из хранилища
     * @param id идентификатор объекта
     * @return ссылка на прочитанный объект
     */
    EntityType read(Integer id);

    /**
     * Обновить объект - сущность в хранилище
     * @param entity ссылка на объект
     */
    void update(EntityType entity);

    /**
     * Удалить объект - сущность из хранилища
     * @param entity ссылка на объект
     */
    void delete(EntityType entity);

    /**
     * Удалить объект - сущность из хранилища
     * @param id идентификатор объекта
     */
    void delete(Integer id);

    /**
     * Получить список всех объектов - сущностей конкретного типа
     * @return список объектов
     */
    List<EntityType> findAll();
}
